"use strict";
/** 泛型接口(1) **/
/* interface ConfigFn {
  <T>(value: T):T
}

const getData:ConfigFn = function<T>(value: T):T{
  return value
}

getData<String>('张三')
// getData<String>(11) // 类型“number”的参数不能赋给类型“String”的参数。 */
/** 泛型接口(2) **/
/* interface ConfigFn<T>{
  (value: T):T
}
function getData<T>(value: T):T{
  return value
}
const myGetData:ConfigFn<String> = getData
myGetData('20') */
// myGetData(20) // 类型“number”的参数不能赋给类型“String”的参数
/** 把类作为参数来约束数据传入的类型 **/
/* class User {
  username: string | undefined
  password: string | undefined
}

class MysqlDb {
  add(user: User): boolean {
    console.log(user)
    return true
  }
}
const u = new User()
u.username = '吴超'
u.password = '123456'
const Db = new MysqlDb()
Db.add(u) */
/** 操作数据库的泛型类 **/
/*
class MysqlDb<T> {
  add(info: T): boolean {
    console.log(info)
    return true
  }
}

// 想给User表增加数据
// 1、定义一个User类 和 数据库进行映射

class User {
  username: string | undefined
  password: string | undefined
}
const u = new User()
u.username = '张三'
u.password = '123456'
const Db = new MysqlDb<User>()
Db.add(u)
 */
/** 2、定义一个ArticleCate类 和 数据库进行映射 **/
// 操作数据的泛型类
var MysqlDb = /** @class */ (function () {
    function MysqlDb() {
    }
    MysqlDb.prototype.add = function (info) {
        console.log(info);
        return true;
    };
    return MysqlDb;
}());
var ArticleCate = /** @class */ (function () {
    function ArticleCate(params) {
        this.title = params.title;
        this.desc = params.desc;
        this.status = params.status;
    }
    return ArticleCate;
}());
var a = new ArticleCate({
    title: '分类',
    desc: '11',
    status: 0
});
/** 类当做参数的泛型类 **/
var Db = new MysqlDb();
Db.add(a);
